package com.sojson.util.encryption;

import com.sojson.constant.ConstantByMap;
import com.sojson.util.encryption.impl.EncryptionUtilImpl;

/**
 * 加密工具类
 * 
 * @author liu
 * @date 2020-11-02
 */
public class EncryptionUtil {

    private static final EncryptionUtilInterface ENCRYPTION_UTIL_INTERFACE = EncryptionUtilImpl.getInstances();
    /** 要拼接的密钥的长度 */
    public static final int SUFFIX_KEY_LENTH = ConstantByMap.DEFAULT_KEY.length();

    /**
     * 不可逆的加密方法
     * 
     * @param inStr
     * @return
     * @throws Exception
     */
    public static String encryption(String inStr) throws Exception {
        return ENCRYPTION_UTIL_INTERFACE.encryption(inStr);
    }

    /**
     * 不可逆的加密方法
     * 
     * @param inStr
     * @param key 加密密钥
     * @return
     * @throws Exception
     */
    public static String encryption(String inStr, String key) throws Exception {
        return ENCRYPTION_UTIL_INTERFACE.encryption(inStr, key);
    }

    /**
     * 可逆的加密方法
     * 
     * @param inStr
     * @return
     */
    public static String encryptionReversible(String inStr) {
        return ENCRYPTION_UTIL_INTERFACE.encryptionReversible(inStr);
    }

    /**
     * 可逆的加密方法
     * 
     * @param inStr
     * @param key 加密密钥
     * @return
     */
    public static String encryptionReversible(String inStr, String key) {
        return ENCRYPTION_UTIL_INTERFACE.encryptionReversible(inStr, key);
    }

    /**
     * 解密方法
     * 
     * @param inStr
     * @return
     */
    public static String decryption(String inStr) {
        return ENCRYPTION_UTIL_INTERFACE.decryption(inStr);
    }

    /**
     * 解密方法
     * 
     * @param inStr
     * @param key 解密密钥
     * @return
     */
    public static String decryption(String inStr, String key) {
        return ENCRYPTION_UTIL_INTERFACE.decryption(inStr, key);
    }

    /**
     * 解密方法
     * 
     * @param inStr
     * @return
     */
    public static byte[] decryption(byte[] inStr) {
        return ENCRYPTION_UTIL_INTERFACE.decryption(inStr);
    }

    /**
     * 解密方法
     * 
     * @param inStr
     * @param key 解密密钥
     * @return
     */
    public static byte[] decryption(byte[] inStr, String key) {
        return ENCRYPTION_UTIL_INTERFACE.decryption(inStr, key);
    }

}